<?php
/**
 * VDONG Project
 * ============================================================================
 * Copyright (c) 2016 www.vdchina.com
 * ----------------------------------------------------------------------------
 * 文件名称：index.php
 * ----------------------------------------------------------------------------
 * 功能描述：三级联动
 * ----------------------------------------------------------------------------
 * 作者：liyinglong
 * ----------------------------------------------------------------------------
 */
namespace app\sanji\admin;

use app\common\builder\ZBuilder;
use app\sanji\model\Lab as LabModel;
use app\admin\controller\Admin;
/**
 * 三级联动模块控制器
 * @package app\sanji\controller
 */
class Lab extends Admin
{   
    
   /**
    * 构造函数
    * @param    int     startStatus         数据状态   开启状态
    * @param    int     del                 数据状态   关闭状态
    * @param    int     pid                 顶级ID     默认为0
    */ 
     public function __construct(){
        parent::__construct();
            define('startStatus',1);           
            define('closeStatus',2);           
            define('pid',0);                   
    }
        
    /**
     * 第一级列表
     * @param  int  startStatus    数据状态   开启状态
     * @param  int  pid            顶级ID     默认0
     * @author liyinglong
     * 
     */
    public function index(){
   
        cookie('__forward__', $_SERVER['REQUEST_URI']);

        $where['status'] =  startStatus;
        $where['pid'] =  pid;
        // 数据列表
        $data_list = LabModel::where($where)->paginate();

        // 分页数据
        $page = $data_list->render();
        //下一级按钮
        $btn_access = [
          'title' => '下一级',
          'icon'  => 'fa fa-fw fa-plus-square',
          'href'  => url('twoList', ['id' => '__id__'])
        ];

        // 使用ZBuilder快速创建数据表格
        return ZBuilder::make('table')
            ->setPageTitle('第一级别列表') // 设置页面标题
            ->addColumns([ // 批量添加列
                ['id', 'ID'],
                ['name', '名称'],
                ['content', '内容信息'],
                ['createtime', '创建时间'],
                ['right_button', '操作', 'btn']
            ])
            ->addTopButtons('add,delete')      // 批量添加顶部按钮
            ->addRightButton('custom', $btn_access) // 添加下一家按钮
            ->addRightButtons('edit,delete')   // 批量添加右侧按钮
            ->setRowList($data_list) // 设置表格数据
            ->setPages($page) // 设置分页数据
            ->fetch(); // 渲染页面

  
    }

    /**
     * 第一级的添加
     * @param  int  startStatus    数据状态   开启状态
     * @param  int  pid            顶级ID     默认0
     * @author liyinglong
     * 
     */
      public  function  add(){
        cookie('__forward__', $_SERVER['REQUEST_URI']);
            if($this->request->isPost()){

                   $data['name'] = $_POST['name'];
                   $data['content'] = $_POST['content'];
                   $data['status'] = startStatus;
                   $data['pid'] = pid;
                   $data['createtime'] = date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']);

                    if (LabModel::create($data)) {
                        $this->success('添加成功', cookie('__forward__'));
                    } else {
                        $this->error('添加失败');
                    }

            }else{

                   return ZBuilder::make('form')
                         ->addText('name', '名称')
                         ->addText('content', '内容信息')
                        ->fetch();

            }
 
       }


      /**
       * 第一级的删除
       * @param  int  closeStatus    数据状态   关闭状态
       * @param  int  pid            顶级ID     默认0
       * @author liyinglong
       * 
       */
     public   function  delete($ids = ''){
          
          cookie('__forward__', $_SERVER['REQUEST_URI']);
      
          $ids = $this->request->isPost() ? input('post.ids/a') : input('param.ids');
           
          if (empty($ids)) $this->error('缺少主键');
            
                $data['status'] = closeStatus;
            
          if (LabModel::where('id', 'in', $ids)->update($data)) {
                 
                  $count = LabModel::where('pid', 'in', $ids)->count();

                 if($count>0){
                        if(LabModel::where('pid', 'in', $ids)->update($data)){
                                                    
                              $result=LabModel::where('pid', 'in', $ids)->select();
                                     foreach ($result as $ke => $val) {
                                          if(LabModel::where('pid', 'in', $val['id'])->update($data)){
                                                      
                                                   $this->success('删除成功');
                                          }else{
                                                  
                                                   $this->error('删除失败');
                                          }
                                                    
                                }
                        }
                 }else{
                            $this->success('删除成功');
                 }
                   
                   
                  
           } else {
                  $this->error('删除失败');
           }
        
     }

      /**
       * 第一级的编辑
       * @param  int  id            编辑数据的ID
       * @author liyinglong
       * 
       */ 
    public function edit($id=""){
        cookie('__forward__', $_SERVER['REQUEST_URI']);
        if ($id === null) $this->error('缺少参数');
       
        // 修改数据
        if ($this->request->isPost()) {

            $data = $this->request->post();
            $result = LabModel::where('id', $id)->update($data);
            if ($result!==false) {
                $this->success('编辑成功', cookie('__forward__'));
            } else {
                $this->error('编辑失败');
            }
        }else{
              // 获取数据
              $info = LabModel::where('id', $id)->find();

                   return ZBuilder::make('form')
                           ->addText('name', '名称')
                           ->addText('content', '内容信息')
                           ->setFormData($info) // 设置表单数据
                           ->fetch();    
        }
    }



      /**
       * 第二级的列表
       * @param  int  id                    上级传过来的ID
       * @param  int  startStatus           数据状态  开启
       * @author liyinglong
       * 
       */ 
    public  function twoList($id=""){

           cookie('__forward__', $_SERVER['REQUEST_URI']);

            $where['status'] =  startStatus;
            $where['pid'] =  $id;
            // 数据列表
            $data_list =LabModel::where($where)->paginate();
            
            // 分页数据
            $page = $data_list->render();
            //编辑按钮
            $btn_access_edit = [
              'title' => '编辑',
              'icon'  => 'fa fa-fw fa-pencil',
              'href'  => url('twoEdit', ['id' => '__id__'])
             ];
            //删除按钮
            $btn_access_del = [
              'title' => '删除',
              'icon'  => 'fa fa-fw fa-remove',
              'href'  => url('twoDelete', ['id' => '__id__'])
             ];
        
            // 添加按钮
              $btn_access_add = [
                  'title' => '添加',
                  'icon'  => 'fa fa-fw fa-key',
                  'href'  => url('twoAdd', ['id' => $id])
              ];
          
              //添加触发第三级别列表按钮
              $btn_access_list = [
                'title' => '下级',
                'icon'  => 'fa fa-fw fa-plus-square',
                'href'  => url('threeList', ['id' => '__id__'])
              ];
        
            // 使用ZBuilder快速创建数据表格
            return ZBuilder::make('table')
                ->setPageTitle('第二级别列表') // 设置页面标题
                ->addColumns([ // 批量添加列
                    ['id', 'ID'],
                    ['name', '名称'],
                    ['content', '内容信息'],
                    ['createtime', '创建时间'],
                    ['right_button', '操作', 'btn']
                ]) 
                ->addTopButton('custom', $btn_access_add)    // 增加添加按钮
                ->addRightButton('custom', $btn_access_list) // 添加下一级的按钮
                ->addRightButton('custom', $btn_access_edit) // 添加编辑按钮
                ->addRightButton('custom', $btn_access_del)  // 添加删除按钮
                ->setRowList($data_list) // 设置表格数据
                ->setPages($page) // 设置分页数据
                ->fetch(); // 渲染页面

    }


      /**
       * 第二级的添加
       * @param  int  id                    上级传过来的ID
       * @param  int  startStatus           数据状态  开启
       * @author liyinglong
       * 
       */ 
      public  function  twoAdd($id=""){
            
            cookie('__forward__', $_SERVER['REQUEST_URI']);
            if ($id === null) $this->error('缺少参数');

            if($this->request->isPost()){
                     $data['pid'] = $id;
                     $data['status'] = startStatus;
                     $data['content'] = $_POST['content'];
                     $data['createtime'] = date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']);
                      if (LabModel::create($data)) {
                          $this->success('添加成功', cookie('__forward__'));
                      } else {
                          $this->error('添加失败');
                      }

              }else{
                 
                     return ZBuilder::make('form')
                       ->addText('content', '内容信息')
                       ->fetch();

              }
    }

      /**
       * 第二级的编辑
       * @param  int  id                    要编辑的数据ID
       * @param  int  startStatus           数据状态  开启
       * @author liyinglong
       * 
       */ 
       public  function twoEdit($id=""){
               cookie('__forward__', $_SERVER['REQUEST_URI']);
               if ($id === null) $this->error('缺少参数');
   
                  // 保存数据
                  if ($this->request->isPost()) {

                        $data['content'] = $_POST['content'];
                        $result =  LabModel::where('id', $id)->update($data);
                        if ($result!==false) {
                            $this->success('编辑成功', cookie('__forward__'));
                        } else {
                            $this->error('编辑失败');
                        }
                  }else{
                             // 获取数据
                             $info = LabModel::where('id', $id)->find();
                             return ZBuilder::make('form')
                                    ->addText('content', '内容信息')
                                    ->setFormData($info) // 设置表单数据
                                    ->fetch();    
                  }
        }

      /**
       * 第二级的删除
       * @param  int  id                    要删除的数据ID
       * @param  int  closeStatus           数据状态  关闭
       * @author liyinglong
       * 
       */ 
      public function twoDelete($id=""){
           
             cookie('__forward__', $_SERVER['REQUEST_URI']);

             if (empty($id)) $this->error('缺少主键');

                 $where['id'] = $id;
                 $data['status'] = closeStatus;

                 if (LabModel::where($where)->update($data)) {

                        $num = LabModel::where('pid', 'in', $id)->count();
                         
                        if($num>0){
                            if(LabModel::where('pid', 'in', $id)->update($data)){
                                      
                                       $this->success('删除成功');
                             }else{
                                       $this->error('删除失败');
                             }    
                         }else{
                                     $this->success('删除成功');
                         }

                             

                  } else {
                         $this->error('删除失败');
                 }
        }


       /**
       * 第三级的列表
       * @param  int  id                    要删除的数据ID
       * @param  int  startStatus           数据状态  开启
       * @author liyinglong
       * 
       */ 
      public function threeList($id=""){
           cookie('__forward__', $_SERVER['REQUEST_URI']);
            $where['status'] =  startStatus;
            $where['pid'] =  $id;
            // 数据列表
            $data_list =LabModel::where($where)->paginate();
            
            // 分页数据
            $page = $data_list->render();
            $btn_access_edit = [
              'title' => '编辑',
              'icon'  => 'fa fa-fw fa-pencil',
              'href'  => url('threeEdit', ['id' => '__id__'])
             ];
            //删除按钮
            $btn_access_del = [
              'title' => '删除',
              'icon'  => 'fa fa-fw fa-remove',
              'href'  => url('threeDelete', ['id' => '__id__'])
             ];
        
            // 添加按钮
              $btn_access_add = [
                  'title' => '添加',
                  'icon'  => 'fa fa-fw fa-key',
                  'href'  => url('threeAdd', ['id' => $id])
              ];
          
        
            // 使用ZBuilder快速创建数据表格
            return ZBuilder::make('table')
                ->setPageTitle('第三级别列表') // 设置页面标题
                ->addColumns([ // 批量添加列
                    ['id', 'ID'],
                    ['name', '名称'],
                    ['content', '内容信息'],
                    ['createtime', '创建时间'],
                    ['right_button', '操作', 'btn']
                ]) 
                ->addTopButton('custom', $btn_access_add)    // 增加添加按钮
                ->addRightButton('custom', $btn_access_edit) // 添加编辑按钮
                ->addRightButton('custom', $btn_access_del)  // 添加删除按钮
                ->setRowList($data_list) // 设置表格数据
                ->setPages($page) // 设置分页数据
                ->fetch(); // 渲染页面

      }


      /**
       * 第三级的添加
       * @param  int  id                上级要传下去的ID
       * @param  int  startStatus       数据状态  开启
       * @author liyinglong
       * 
       */ 
      public  function  threeAdd($id=""){
            cookie('__forward__', $_SERVER['REQUEST_URI']);
            
            if ($id === null) $this->error('缺少参数');

            if($this->request->isPost()){
                     $data['pid'] = $id;
                     $data['status'] = startStatus;
                     $data['content'] = $_POST['content'];
                     $data['createtime'] = date('Y-m-d H:i:s',$_SERVER['REQUEST_TIME']);
                      if (LabModel::create($data)) {
                          $this->success('添加成功', cookie('__forward__'));
                      } else {
                          $this->error('添加失败');
                      }

              }else{
                 
                 return ZBuilder::make('form')
                       ->addText('content', '内容信息')
                       ->fetch();

              }
    }


      /**
       * 第三级的编辑
       * @param  int  id                要编辑的数据ID
       * @param  int  startStatus       数据状态  开启
       * @author liyinglong
       * 
       */ 
       public  function threeEdit($id=""){
               cookie('__forward__', $_SERVER['REQUEST_URI']);
               if ($id === null) $this->error('缺少参数');
   
                  // 保存数据
                  if ($this->request->isPost()) {

                         $data['content'] = $_POST['content'];
                         $result =  LabModel::where('id', $id)->update($data);
                         if ($result!==false) {
                            $this->success('编辑成功', cookie('__forward__'));
                          } else {
                            $this->error('编辑失败');
                         }
                  }else{
                            // 获取数据
                            $info = LabModel::where('id', $id)->find();

                             return ZBuilder::make('form')
                                    ->addText('content', '内容信息')
                                    ->setFormData($info) // 设置表单数据
                                    ->fetch();    
                  }
        }

      /**
       * 第三级的删除
       * @param  int  id                要删除的数据ID
       * @param  int  closeStatus       数据状态  关闭
       * @author liyinglong
       * 
       */ 
      public function threeDelete($id=""){
            cookie('__forward__', $_SERVER['REQUEST_URI']);

             if (empty($id)) $this->error('缺少主键');
                  $where['id'] = $id;
                  $data['status'] = closeStatus;

             if (LabModel::where($where)->update($data)) {
                 
                     $this->success('删除成功');

              } else {
                     $this->error('删除失败');
             }
        }


}